package day04.concurrent01;

import java.util.concurrent.CyclicBarrier;

/**
 * 4.CyclicBarrier 栅栏
 */
public class Demo06 {
    public static void main(String[] args) {
        CyclicBarrier cb = new CyclicBarrier(3);

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    System.out.println("一号玩家加载完成！");
                    cb.await();//检查栅栏中等待的线程是否达到指定数量，如果没有达到进入阻塞，达到则放行所有线程
                    System.out.println("一号玩家开始游戏！");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                    System.out.println("二号玩家加载完成！");
                    cb.await();//检查栅栏中等待的线程是否达到指定数量，如果没有达到进入阻塞，达到则放行所有线程
                    System.out.println("二号玩家开始游戏！");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                    System.out.println("三号玩家加载完成！");
                    cb.await();//检查栅栏中等待的线程是否达到指定数量，如果没有达到进入阻塞，达到则放行所有线程
                    System.out.println("三号玩家开始游戏！");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}
